#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

void printBinary(int n)
{
    // 假设int类型为32位，准备一个数组存储二进制表示
    char binary[33]; // 32位 + 1个终止符'\0'
    binary[32] = '\0'; // 确保字符串以'\0'结尾

    for(int i = 31; i >= 0; i--)
    {
        // 获取n的当前位（0或1）
        binary[i] = (n & 1) ? '1' : '0';
        n >>= 1; // 右移一位，准备处理下一位
    }

    // 输出二进制表示
    printf("%s\n", binary);
}

int main(const int argc,const char* argv[])
{
    int number = 42;
    float fl = 3.1415926;
    char text[] = "Hello";

    // 右对齐整数，占据至少5个字符宽度
    printf("%5d|\n", number);
    printf("%#x|\n", number);
    printf("%#o|\n", number);
    printBinary(number);
    printf("%6.2f|\n", fl);
    // 右对齐字符串，占据至少10个字符宽度
    printf("%10s|\n", text);

    int flags = 0;
    flags = fcntl(0,F_GETFL);
    if(flags == -1){
        perror("fcntl error");
        exit(-1);
    }

    printf("%#x\n",flags);

    flags |= O_NONBLOCK;

    fcntl(0,F_SETFL,flags);

    char buf[32]={0};
    while(1){
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        sleep(1);
        printf("buf = %s\n", buf);
        puts("*************");
    }

    return 0;
}